package com.hifar.test.api.util;

import java.util.Base64;

/**
 * 认证工具类
 * 用于生成Basic认证头
 * 
 * 认证流程：
 * 1. 用户名明文 + 密码RSA加密 → 用户名:加密密码
 * 2. 整体Base64编码 → Basic [Base64编码结果]
 */
public class AuthUtil {
    
    /**
     * 生成Basic认证头
     * 
     * @param username 用户名
     * @param password 原始密码
     * @return Basic认证头字符串
     * @throws Exception 加密异常
     */
    public static String generateBasicAuth(String username, String password) throws Exception {
        // 使用RSA加密密码
        String encryptedPassword = RSAUtil.encryptPassword(password);
        
        // 构造用户名:加密密码的格式
        String credentials = username + ":" + encryptedPassword;
        
        // Base64编码
        String encodedCredentials = Base64.getEncoder().encodeToString(credentials.getBytes());
        
        // 返回Basic认证头
        return "Basic " + encodedCredentials;
    }
    
    /**
     * 生成Basic认证头（使用自定义公钥）
     * 
     * @param username 用户名
     * @param password 原始密码
     * @param publicKey 自定义公钥
     * @return Basic认证头字符串
     * @throws Exception 加密异常
     */
    public static String generateBasicAuth(String username, String password, String publicKey) throws Exception {
        // 使用指定公钥加密密码
        String encryptedPassword = RSAUtil.encryptPassword(password, publicKey);
        
        // 构造用户名:加密密码的格式
        String credentials = username + ":" + encryptedPassword;
        
        // Base64编码
        String encodedCredentials = Base64.getEncoder().encodeToString(credentials.getBytes());
        
        // 返回Basic认证头
        return "Basic " + encodedCredentials;
    }
    
    /**
     * 验证Basic认证头格式
     * 
     * @param authHeader 认证头
     * @return 是否为有效的Basic认证头
     */
    public static boolean isValidBasicAuth(String authHeader) {
        return authHeader != null && authHeader.startsWith("Basic ");
    }
    
    /**
     * 从Basic认证头中提取凭据
     * 
     * @param authHeader 认证头
     * @return 解码后的凭据字符串
     */
    public static String extractCredentials(String authHeader) {
        if (!isValidBasicAuth(authHeader)) {
            throw new IllegalArgumentException("Invalid Basic auth header");
        }
        
        String encodedCredentials = authHeader.substring(6); // 移除"Basic "前缀
        return new String(Base64.getDecoder().decode(encodedCredentials));
    }
}
